# Измерение производительности кода и оптимизация
===============

[![Измерение производительности кода и оптимизация](https://img.youtube.com/vi/sanq2X7Re8o/0.jpg)](https://www.youtube.com/watch?v=sanq2X7Re8o)

## Оптимизация
- Объекты одинаковой структуры
- Функции одинаковой формы (мономорфные)
- Массивы одинаковых типов

## Замер скорости
- Желательно проверять крупные алгоритмы или целые блоки
- Одинаковые условия исполнения для каждой итерации теста
- Единица оптимизации - функция, оборачиваем тестируемый код в функцию
- Сохраняем результаты (вводим оптимизатор в заблуждение)
- Прогрев кода перед тестом (дождаться стабилизации)
- Может получиться инлайнинг функций (можно проверить руками)
- Чтоб не инлайнило, например (можно добавить `try {}`)
- Принимаем во внимание, что константы подставляются в выражения
- Выражения могут быть предварительно вычислены (не на каждой итерации)
- Вынесение инвариантов цикла (в цикле остается только то, на что влияет цикл)
- Мертвый код (который мог бы быть выброшен оптимизатором)
- Внетренние функции v8 `--allow-natives-syntax`
- Отключение автоматического gc `--nouse-idle-notification`
- Ручной gc `--expose-gc`
- Выделение больше памяти `--max_old_space_size=2048`
